home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 41
/
Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso
/
Aminet
/
gfx
/
edit
/
AmiCAD_2.06.lha
/
AmiCAD
/
ARexx
/
Karnaugh.AmiCAD
< prev
next >
Wrap
Text File
|
1999-02-07
|
3KB
|
127 lines
/* Création d'un tableau de Karnaugh
Version 1.00, 5 Avril 1998, © R.Florac */
options results /* indispensable pour récupérer le résultat des macros */
signal on error /* pour l'interception des erreurs */
signal on syntax
'ASKNUM("Nombre d''entrées",3)'; nbe=result
if nbe="" then exit
do i=1 to nbe
'ASKTEXT("Nom de l''entrée 'i'","E")'; nomE.i=result
end
'ASKTEXT("Nom de la sortie","Q")'; nomS=result
'SETSCALE(0,100,100):ROTATE(0,0):SYMMETRY(0,0):DRAWMODE(1)'
nbcases=2**nbe /* nombre de cases */
nblignes=nbe%2 /* nombre de lignes */
nbcol=nbe-nblignes /* nombre d'entrées situées en haut (horizontal) */
/* Tracé des lignes verticales */
c=(nbe-nbcol)*10+20
l0=10+nbcol*15
l1=l0+(2**nblignes)*30
do col=1 to (2**nbcol)+1
select
when col=1 then 'DRAWMODE(2)'
when col=(2**nbcol)+1 then 'DRAWMODE(2)'
otherwise 'DRAWMODE(1)'
end
'MARK(DRAW('c+col*30','l0','c+col*30','l1'))'
col.col=c+col*30
end
/* Tracé des lignes horizontales */
c0=(nbe-nbcol)*10+50
c1=c0+((2**nbcol))*30
do i=1 to (2**nblignes)+1
select
when i=1 then 'DRAWMODE(2)'
when i=(2**nblignes)+1 then 'DRAWMODE(2)'
otherwise 'DRAWMODE(1)'
end
'MARK(DRAW('c0','l0','c1','l0'))'
ligne.i=l0
l0=l0+30
end
/* Tracé des valeurs d'entrées (horizontales) */
nbval=(2**nbcol)/2
l0=10+nbcol*15
pas=1
do c=1 to nbcol
if c=nbcol then do
p=nbval+1
d=p+nbval
'MARK(DRAW('col.p','l0-c*10','col.d','l0-c*10'))'
end
else do
p=pas+1
do while p<=nbval*2
r=p+pas*2
'MARK(DRAW('col.p','l0-c*10','col.r','l0-c*10'))'
p=r+pas*2
end
pas=pas*2
end
end
/* Tracé des valeurs d'entrées (verticales) */
nbval=(2**nblignes)/2
pas=1
do l=1 to nblignes
if l=nblignes then do
p=nbval+1
d=p+nbval
'MARK(DRAW('col.1-10*l','ligne.p','col.1-10*l','ligne.d'))'
end
else do
p=pas+1
do while p<=nbval*2
r=p+pas*2
'MARK(DRAW('col.1-10*l','ligne.p','col.1-10*l','ligne.r'))'
p=r+pas*2
end
pas=pas*2
end
end
/* Écriture des repères verticaux */
'ROTATE(0,3):DRAWMODE(1)'
do i=1 to nblignes
if nomE.i="" then nomE.i='?'
'MARK(WRITE("'nomE.i'",'col.1-10*i+3','ligne.d+10'+TXHEIGHT("'nomE.i'")))'
c=c+15
end
/* Écriture des repères horizontaux */
'ROTATE(0,0)'
d=(2**nbcol)+1
do while i<=nbe
if nomE.i="" then nomE.i='?'
'MARK(WRITE("'nomE.i'",'col.d+5','ligne.1+4-10*(i-nblignes)'))'
i=i+1
end
/* Écriture du nom de la sortie */
if nomS="" then nomS="?"
d=d%2+1
p=(2**nblignes)+1
'MARK(WRITE("'nomS'",'col.d'-TXWIDTH("'nomS'")/2,'ligne.p+15'))'
exit
/* Traitement des erreurs, interruption du programme */
syntax:
erreur=RC
'MESSAGE("Script Karnaugh"+CHR(10)+"Erreur de syntaxe"+CHR(10)+"en ligne 'SIGL'"+CHR(10)+"'errortext(erreur)'")'
exit
error:
'MESSAGE("Script Karnaugh"+CHR(10)+"Erreur en ligne 'SIGL'")'
exit